package com.curricula.curriculum.action;

import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.curricula.curriculum.form.PersonalForm;
import com.curricula.curriculum.service.PersonalService;
import com.curricula.curriculum.vo.PersonalVO;
import com.curricula.mensaje.vo.MsgVO;
import com.curricula.usuario.vo.UsuarioVO;

/**
 * DispatchAction que controla las altas bajas y cambios en la tabla de PERSONAL.
 * 
 * @author Hugo
 * @version 1.0
 */
public class PersonalAction extends DispatchAction {
	MsgVO msg = new MsgVO();
	ActionForward forward = null;
	static Logger log = Logger.getLogger(PersonalAction.class);
	
	/**
	 * Inserta registros en la tabla curricula.personal del usuario que esta actualmente en sesion.
	 * 
	 * @author Hugo
	 * @param ActionMapping mapping
	 * @param ActionForm form
	 * @param HttpServletRequest request
	 * @param HttpServletResponse response
	 * @return mapping.findForward forward
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */
	public ActionForward setInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws IllegalAccessException, InvocationTargetException{
		PersonalForm personalForm = (PersonalForm) form;
		PersonalVO infoPersonal=new PersonalVO();
		BeanUtils.copyProperties(infoPersonal, personalForm);
		UsuarioVO userSesion = (UsuarioVO) request.getSession().getAttribute("usuarioVO");
		try {
			if(userSesion!=null){
				infoPersonal.setId(userSesion.getUsrId());
				if(PersonalService.llenar(infoPersonal)){
					msg.setMsgTipo("informacion");
					msg.setMsgTitulo("Información de actualización");
					msg.setMsgDescripcion("Los datos se han actualizado correctamente.");
					request.setAttribute("msgVO", msg);
					forward = mapping.findForward("formulario");
				}else{
					msg.setMsgTipo("informacion");
					msg.setMsgTitulo("Información de actualización");
					msg.setMsgDescripcion("Ocurrio un error al actualizar la información.");
					request.setAttribute("msgVO", msg);
					forward = mapping.findForward("formulario");
				}				
			}else{
				msg.setMsgTipo("registro");
				msg.setMsgTitulo("Usuario no Registrado");
				msg.setMsgDescripcion("Debe iniciar sesion para poder modificar su información, por favor escriba un usuario y contrase�a o registre una cuenta.");				
				request.setAttribute("msgVO", msg);
				forward = mapping.findForward("inicio");
			}
		} catch (SQLException e) {
			MsgVO msgbd = new MsgVO("bd", e);
			request.setAttribute("msgVO", msgbd);				
			forward = mapping.findForward("formulario");
		} catch (Exception e) {
			MsgVO msgerror = new MsgVO("error", e);
			request.setAttribute("msgVO", msgerror);				
			forward = mapping.findForward("formulario");
		}
		return forward;
	}	
	
	
	/**
	 * Limpia la forma llenandola con sus valores predeterminados obtenidos de la base de datos
	 * estos valores se mapean en el form para mostrarlos siempre que un usuario haya iniciado
	 * sesion.
	 * 
	 * @author Hugo
	 * @param ActionMapping mapping
	 * @param ActionForm form
	 * @param HttpServletRequest request
	 * @param HttpServletResponse response
	 * @return mapping.findForward forward
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 */	
	public ActionForward clean(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws IllegalAccessException, InvocationTargetException{
		form.reset(mapping, request);
		return forward;
	}
	

}
